import tkinter as tk
from tkinter import messagebox
from leftPanel import LeftPanel
from midPanel import MidPanel
from rightPanel import RightPanel
import constants as const
from datacenter import datacenter as dc
from eventcenter import eventcenter as event
from tools import tools
from resource_path import resource_path  # 导入资源路径处理函数

class LevelEditorApp:
    def __init__(self, root):
        self.root = root
        self.root.title("LevelEditorApp")
        self.root.geometry(f"{const.main_window_width}x{const.main_window_height}")
        self.root.resizable(False, False)

        self.init_event()

        # 创建菜单栏
        self.create_menu()

        # 创建左侧部分
        self.left_panel = LeftPanel(self.root)
        
        # 创建中间部分
        self.mid_panel = MidPanel(self.root)

        # 创建右侧部分
        self.right_panel = RightPanel(self.root)

        root.grid_columnconfigure(0, weight=0, minsize=200)  # 左侧列固定宽度
        root.grid_columnconfigure(1, weight=1)  # 中间列自适应
        root.grid_columnconfigure(2, weight=0, minsize=200)  # 右侧列固定宽度

        # 配置行权重，使所有 Frame 占满窗口高度
        root.grid_rowconfigure(0, weight=1)

    def init_event(self):
        event.add_event(const.event_show_tip_info, self.event_show_tip_info)
        event.add_event(const.event_show_toast, self.toast)

    def create_menu(self):
        menubar = tk.Menu(self.root)

        # 文件菜单
        file_menu = tk.Menu(menubar, tearoff=0)
        file_menu.add_command(label="新建", command=self.new_file)
        file_menu.add_command(label="打开", command=self.open_file)
        file_menu.add_separator()
        file_menu.add_command(label="退出", command=self.root.quit)
        menubar.add_cascade(label="文件", menu=file_menu)

        # 帮助菜单
        help_menu = tk.Menu(menubar, tearoff=0)
        help_menu.add_command(label="关于", command=self.about)
        menubar.add_cascade(label="帮助", menu=help_menu)

        self.root.config(menu=menubar)


    def new_file(self):

        messagebox.showinfo("新建文件", "新建文件功能待实现！")

    def open_file(self):
        messagebox.showinfo("打开文件", "打开文件功能待实现！")

    def about(self):
        messagebox.showinfo("关于", "这是一个 地图编辑器 Ver: 0.1.0\n author：caiyf@ct108.com。")

    def event_show_tip_info(self, info):
        root = self.root
        # 创建自定义消息框并居中显示
        msg_window = tk.Toplevel(root)
        msg_window.title("提示")
        msg_window.resizable(False, False)
        msg_window.transient(root)  # 设置为主窗口的临时窗口
        
        # 创建消息内容
        tk.Label(msg_window, text=info, padx=20, pady=10).pack()
        tk.Button(msg_window, text="确定", command=msg_window.destroy, width=10).pack(pady=10)
        
        # 窗口居中显示
        msg_window.withdraw()  # 先隐藏窗口
        msg_window.update_idletasks()  # 更新窗口信息
        
        # 计算居中位置
        width = msg_window.winfo_width()
        height = msg_window.winfo_height()
        x = (root.winfo_width() - width) // 2 + root.winfo_x()
        y = (root.winfo_height() - height) // 2 + root.winfo_y()
        
        # 设置位置并显示
        msg_window.geometry(f"{width}x{height}+{x}+{y}")
        msg_window.deiconify()  # 显示窗口
        msg_window.focus_set()  # 设置焦点
        
        # 等待窗口关闭
        msg_window.wait_window()

    
    def toast(self, message, duration=1500):
        # 创建一个无边框的顶层窗口
        toast_window = tk.Toplevel(self.root)
        toast_window.overrideredirect(True)  # 无边框
        toast_window.attributes("-alpha", 0.0)  # 初始透明度为0
        toast_window.attributes("-topmost", True)  # 置顶显示
        
        # 创建消息标签
        label = tk.Label(toast_window, text=message, padx=20, pady=10,
                         bg="#333333", fg="white", font=("SimHei", 10))
        label.pack()
        
        # 窗口居中显示
        toast_window.update_idletasks()  # 更新窗口信息
        width = toast_window.winfo_width()
        height = toast_window.winfo_height()
        x = (self.root.winfo_width() - width) // 2 + self.root.winfo_x()
        y = (self.root.winfo_height() - height) // 2 + self.root.winfo_y() + 50  # 稍微偏下
        toast_window.geometry(f"{width}x{height}+{x}+{y}")
        
        # 淡入效果
        def fade_in():
            alpha = toast_window.attributes("-alpha")
            if alpha < 0.9:
                toast_window.attributes("-alpha", alpha + 0.1)
                toast_window.after(50, fade_in)
            else:
                # 淡入完成后，设置定时器关闭
                toast_window.after(duration - 500, fade_out)
        
        # 淡出效果
        def fade_out():
            alpha = toast_window.attributes("-alpha")
            if alpha > 0.1:
                toast_window.attributes("-alpha", alpha - 0.1)
                toast_window.after(50, fade_out)
            else:
                toast_window.destroy()
        
        # 开始淡入
        fade_in()


if __name__ == "__main__":
    # 创建主窗口
    root = tk.Tk()
    app = LevelEditorApp(root)
    root.mainloop()
